package cn.com.callback;

import cn.com.elite.EliteBean
import cn.com.kh.KHUtil
import org.springframework.jdbc.core.JdbcTemplate;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.text.SimpleDateFormat;

/**
 *
 * @Title: apiChatWorkTime
 * @Description: Chat是否在工作时间，1 是，其他 否
 * @author: LiJuntao
 * @date 2020-05-09 下午1:02:36
 *
 */

public class apiChatWorkTime implements ServiceBackInvoke {
    private static final Log log = LogFactory.getLog(apiChatWorkTime.class);

    public String doCallBack(EliteBean eliteBean, HttpServletRequest request, HttpServletResponse response) {

        response.setCharacterEncoding("UTF-8");
        response.setContentType("application/json;charset=UTF-8");

        // 获取数据源
        JdbcTemplate jt = new JdbcTemplate(eliteBean.getDataSource());
        String dealSQL = "";
        String dealSQL1 = "";

        int remind;
		String datetype="";//工作时间 1 是 0 否
        //设置日期格式
        SimpleDateFormat dft = new SimpleDateFormat("yyyy-MM-dd");
        Calendar today = Calendar.getInstance();
        log.debug("系统当前时间:" + dft.format(today.getTime().getTime()));
        try {
            def workgroup_id = request.getParameter("workgroupId");
            log.debug("工作组ID:" + workgroup_id);
			
			//当天
            dealSQL = "Select Date_Format(Freedate, '%Y-%m-%d') worktimeflag From c_Freedate_Chat c Where Current_Date = Date_Format(Freedate, '%Y-%m-%d') And (c.Workgroup_Id = ? Or c.Workgroup_Id = '') Limit 1";
            List<Map<String, Object>> sqlResult = jt.queryForList(dealSQL, workgroup_id);
            log.debug("节假日查询结果:" + sqlResult.toString());
			
			//前一天
			dealSQL1 = "Select Date_Format(Freedate, '%Y-%m-%d') worktimeflag From c_Freedate_Chat c Where date_sub(curdate(),interval 1 day) = Date_Format(Freedate, '%Y-%m-%d') And (c.Workgroup_Id = ? Or c.Workgroup_Id = '') Limit 1";
			List<Map<String, Object>> sqlResult1 = jt.queryForList(dealSQL1, workgroup_id);
            log.debug("节假日查询结果1:" + sqlResult1.toString());
			
			//交易日：9:00-次日5:00
			//非交易日：9:00-18:00
			/*
			20230901调整为：
			周一至周五交易日：9:00至次日9:00；
			周末及非交易日：9:00-18:00
			周一至周五默认是交易日，非交易日我们单独配置；
			周末默认是非交易日，其他如有需要我们单独删除
			*/
			SimpleDateFormat df = new SimpleDateFormat("HH:mm"); // 设置日期格式
			Date now = null;
			Date beginTime1 = null;
			Date endTime1 = null;
			Date beginTime2 = null;
			Date endTime2 = null;
			try {
				now = df.parse(df.format(new Date()));
				log.debug("当前时间："+now);
				//今天非交易日
				if (sqlResult.size() > 0) {
					beginTime1 = df.parse("09:00");
					endTime1 = df.parse("18:00");
					boolean flag1 = belongCalendar(now, beginTime1, endTime1);
					//昨天也是非交易日
					if(sqlResult1.size() > 0){
						if (flag1) {
							datetype="1";
							log.debug("今天非交易日昨天非交易日,系统时间:" + df.format(new Date()) + "，1在");
						} else {
							datetype="0";
							log.debug("今天非交易日昨天非交易日,系统时间:" + df.format(new Date()) + "，1不在");
						}
					//昨天交易日
					}else{
						beginTime2 = df.parse("00:00");
						endTime2 = df.parse("09:00");
						boolean flag2 = belongCalendar(now, beginTime2, endTime2);
						if (flag1||flag2) {
							datetype="1";
							log.debug("今天非交易日昨天交易日,系统时间:" + df.format(new Date()) + "，0在");
						} else {
							datetype="0";
							log.debug("今天非交易日昨天交易日,系统时间:" + df.format(new Date()) + "，0不在");
						}
					}
					
				//今天交易日
				}else{
					beginTime1 = df.parse("09:00");
					endTime1 = df.parse("24:00");
					boolean flag1 = belongCalendar(now, beginTime1, endTime1);
					//昨天也是非交易日
					if(sqlResult1.size() > 0){
						if (flag1) {
							datetype="1";
							log.debug("今天交易日昨天非交易日,系统时间:" + df.format(new Date()) + "，1在");
						} else {
							datetype="0";
							log.debug("今天交易日昨天非交易日,系统时间:" + df.format(new Date()) + "，1不在");
						}
					//昨天交易日
					}else{
						beginTime2 = df.parse("00:00");
						endTime2 = df.parse("09:00");
						boolean flag2 = belongCalendar(now, beginTime2, endTime2);
						if (flag1||flag2) {
							datetype="1";
							log.debug("今天交易日昨天交易日,系统时间:" + df.format(new Date()) + "，0在");
						} else {
							datetype="0";
							log.debug("今天交易日昨天交易日,系统时间:" + df.format(new Date()) + "，0不在");
						}
					}
				}
			} catch (Exception e) {
				e.printStackTrace();
				datetype="0";
			}
			
			//校验标识
            if (datetype=="0") {
                log.debug("当前为非工作时间");
                remind = 0;
            } else {
                log.debug("当前不是非工作时间，返回-1检查工作组工作时间");
                remind = -1;
            }

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            remind = -1;
        }

        return remind;
    }
	
	/**
                * 判断时间是否在时间段内
     *
     * @param nowTime
     * @param beginTime
     * @param endTime
     * @return
     */
    public static boolean belongCalendar(Date nowTime, Date beginTime, Date endTime) {

        if (nowTime.getTime() == beginTime.getTime()
                || nowTime.getTime() == endTime.getTime()) {
            return true;
        }

        Calendar date = Calendar.getInstance();
        date.setTime(nowTime);

        Calendar begin = Calendar.getInstance();
        begin.setTime(beginTime);

        Calendar end = Calendar.getInstance();
        end.setTime(endTime);

        if (date.after(begin) && date.before(end)) {
            return true;
        } else {
            return false;
        }
    }
}